From 33976d56e6356688a788d7dedf824054a5622300 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 17 Dec 2015 00:10:58 +0300 Subject: [PATCH] refactor Target serialization Remove obscure `metadata` field and implement proper Encodable for TargetKind becase default one is not used. --- src/cargo/core/manifest.rs | 44 ++++++++++++++++--------------- tests/test_cargo_read_manifest.rs | 3 +-- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/cargo/core/manifest.rs b/src/cargo/core/manifest.rs index 28a494eb9..9e2b3567b 100644 --- a/src/cargo/core/manifest.rs +++ b/src/cargo/core/manifest.rs @@ -93,7 +93,7 @@ impl LibKind { } } -#[derive(Debug, Clone, Hash, PartialEq, RustcEncodable, Eq)] +#[derive(Debug, Clone, Hash, PartialEq, Eq)] pub enum TargetKind { Lib(Vec), Bin, @@ -103,6 +103,21 @@ pub enum TargetKind { CustomBuild, } +impl Encodable for TargetKind { + fn encode(&self, s: &mut S) -> Result<(), S::Error> { + match *self { + TargetKind::Lib(ref kinds) => { + kinds.iter().map(|k| k.crate_type()).collect() + } + TargetKind::Bin => vec!["bin"], + TargetKind::Example => vec!["example"], + TargetKind::Test => vec!["test"], + TargetKind::CustomBuild => vec!["custom-build"], + TargetKind::Bench => vec!["bench"], + }.encode(s) + } +} + #[derive(RustcEncodable, RustcDecodable, Clone, PartialEq, Eq, Debug, Hash)] pub struct Profile { pub opt_level: u32, @@ -145,31 +160,18 @@ pub struct Target { } #[derive(RustcEncodable)] -pub struct SerializedTarget { - kind: Vec<&'static str>, - name: String, - src_path: String, - metadata: Option +struct SerializedTarget<'a> { + kind: &'a TargetKind, + name: &'a str, + src_path: &'a str, } impl Encodable for Target { fn encode(&self, s: &mut S) -> Result<(), S::Error> { - let kind = match self.kind { - TargetKind::Lib(ref kinds) => { - kinds.iter().map(|k| k.crate_type()).collect() - } - TargetKind::Bin => vec!["bin"], - TargetKind::Example => vec!["example"], - TargetKind::Test => vec!["test"], - TargetKind::CustomBuild => vec!["custom-build"], - TargetKind::Bench => vec!["bench"], - }; - SerializedTarget { - kind: kind, - name: self.name.clone(), - src_path: self.src_path.display().to_string(), - metadata: self.metadata.clone() + kind: &self.kind, + name: &self.name, + src_path: &self.src_path.display().to_string(), }.encode(s) } } diff --git a/tests/test_cargo_read_manifest.rs b/tests/test_cargo_read_manifest.rs index 52f79ccb9..68ecabac6 100644 --- a/tests/test_cargo_read_manifest.rs +++ b/tests/test_cargo_read_manifest.rs @@ -12,8 +12,7 @@ fn read_manifest_output() -> String { \"targets\":[{\ \"kind\":[\"bin\"],\ \"name\":\"foo\",\ - \"src_path\":\"src[..]foo.rs\",\ - \"metadata\":null\ + \"src_path\":\"src[..]foo.rs\"\ }],\ \"manifest_path\":\"[..]Cargo.toml\"\ }".into() -- 2.30.2